iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 3
0

初學者在剛學寫程式的階段,容易使用 a, b, c 等容易寫但沒有任何意義的命名。以下面這段找質數代碼為例,整段代碼都使用無意義的名稱命名變數,這樣的代碼顯然的容易造成閱讀困難。

public List<int> FindPrimes(List<int> n)
{
    var x = new List<int>();
    for (int i = 0; i < n.Count; i++)
    {
        if (n[i] == 2)
        {
            x.Add(n[i]);
        }
        else
        {
            for (int j = 2; j <= n[i]; j++)
            {
                if (n[i] % j == 0)
                {
                    break;
                }

                if (n[i] == j)
                {
                    x.Add(n[i]);
                }
            }
        }
    }

    return x;
}

如同Uncle Bob提到的

Indeed, the ratio of time spent reading versus writing is well over 10 to 1. We are constantly reading old code as part of the effort to write new code.

所以我們應該盡量讓代碼維持容易閱讀的狀態,比減輕別人甚至是未來的自己的閱讀負擔。

同樣以找質數的代碼為例,我們把變數名稱調整一下,增加代碼的可讀性。透過好的變數名稱,有助於思考邏輯。

public List<int> FindPrimes(List<int> numbers)
{
    var results = new List<int>();
    foreach (var number in numbers)
    {
        if (number == 2)
        {
            results.Add(number);
        }
        else
        {
            for (int modulo = 2; modulo <= number; modulo++)
            {
                if (number % modulo == 0)
                {
                    break;
                }

                if (number == modulo)
                {
                    results.Add(number);
                }
            }
        }
    }

    return results;
}

更進一步

每個變數名稱不是使用無意義的命名了,但是還是需要思考如何讓代碼更容易讓人理解。例如第3行的用來儲存結果的List,通常寫的人都很直覺的這是用來儲存計算結果的變數,所以就直接使用 results 當作變數名稱。

var results = new List<int>();

但是仔細思考 results 的意義,其實可以直接用 primes 描述這個計算結果。比起 results,primes 更能讓人了解這個 List 存的是什麼,讓往下閱讀時可以先有一些概念,減少閱讀代碼的時間。

var primes = new List<int>();

如何把變數命名的精準、讓人一看就理解是一門很深的學問,但是多花一點時間在思考命名變數絕對是物超所值。花自己一些時間,節省未來許多閱讀代碼的人的時間。


上一篇
Day 2 從提示中學習
下一篇
Day 4 常見的消除重複
系列文
在Kata中尋找Clean Code是否搞錯了什麼30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
SamHuang
iT邦新手 5 級 ‧ 2020-09-03 11:42:17

"所以我們應該盡量讓代碼維持容易閱讀的狀態,減輕別人甚至是未來的自己的閱讀負擔。"
這句讓我聯想到 Uncle BoB 提過的 童子軍規則: 對每個模組,每次check in, 就要讓它比上次checked out時變得更為簡潔。

我要留言

立即登入留言